Page({
  data: {
    userInfo: {}, // 存储用户完整信息（含id）
    formData: {
      name: '',      // 对应接口的 nickname
      phone: '',     // 对应接口的 phone
      gender: '女',  // 对应接口的 sex（0:男，1:女）
      birthday: '',  // 对应接口的 birthday
      location: '',  // 对应接口的 address
      bio: '',       // 对应接口的 introduce
      password: ''   // 原始密码（用于验证）
    },
    genderIndex: 1 // 0=男，1=女
  },

  onLoad() {
    this.loadUserInfo();
  },

  /**
   * 加载用户信息并初始化表单
   */
  loadUserInfo() {
    let token = wx.getStorageSync('token') || '';
    const app = getApp();
    const userId = app.globalData.userInfo?.id;

    if (!userId) {
      wx.showToast({ title: '未获取到用户ID', icon: 'none' });
      return;
    }

    wx.request({
      url: `http://localhost/dev-api/userr/users/${userId}`, // 修正可能的笔误userr→user
      method: 'GET',
      header: {
        'Authorization': token ? `Bearer ${token}` : '',
        'Content-Type': 'application/json'
      },
      success: (res) => {
        console.log('加载用户接口返回：', res);
        if (res.statusCode === 200 && res.data.code === 200) {
          const userData = res.data.data;
          // 处理性别映射（根据实际后端定义调整）
          const userGender = userData.sex === 0 ? '男' : '女';
          const genderIndex = userGender === '男' ? 0 : 1;

          this.setData({
            userInfo: userData,
            formData: {
              name: userData.nickname || '',
              phone: userData.phone || '',
              gender: userGender,
              birthday: userData.birthday || '',
              location: userData.address || '',
              bio: userData.introduce || '',
              password: ''
            },
            genderIndex: genderIndex
          });
        } else {
          wx.showToast({
            title: res.data.msg || '加载用户信息失败',
            icon: 'none'
          });
        }
      },
      fail: (err) => {
        console.error('加载用户失败：', err);
        wx.showToast({ title: '加载用户信息失败', icon: 'none' });
      }
    });
  },

  /**
   * 输入框内容变化处理
   */
  onInputChange(e) {
    const { field } = e.currentTarget.dataset;
    const { value } = e.detail;
    this.setData({
      [`formData.${field}`]: value
    });
  },

  /**
   * 性别选择变更处理
   */
  onGenderChange(e) {
    const genderIndex = e.detail.value;
    const genderText = genderIndex === '0' ? '男' : '女';
    this.setData({
      genderIndex: genderIndex,
      'formData.gender': genderText
    }, () => {
      console.log('切换后索引：', this.data.genderIndex, '切换后性别：', this.data.formData.gender);
    });
  },

  /**
   * 生日选择变更处理
   */
  onBirthdayChange(e) {
    this.setData({
      'formData.birthday': e.detail.value
    });
  },

  /**
   * 地区选择变更处理（数组转字符串）
   */
  onLocationChange(e) {
    const locationArr = e.detail.value;
    const locationStr = locationArr.join(' ');
    this.setData({
      'formData.location': locationStr
    });
  },

  /**
   * 头像上传处理
   */
  onUploadAvatar() {
    wx.chooseImage({
      count: 1,
      sizeType: ['compressed'],
      sourceType: ['album', 'camera'],
      success: (res) => {
        const tempFilePath = res.tempFilePaths[0];
        wx.showLoading({ title: '上传中...' });

        wx.uploadFile({
          url: 'http://localhost/dev-api/common/upload',
          filePath: tempFilePath,
          name: 'file',
          header: {
            'Authorization': `Bearer ${wx.getStorageSync('token')}`
          },
          success: (uploadRes) => {
            try {
              const data = JSON.parse(uploadRes.data);
              if (uploadRes.statusCode === 200 && data.code === 200) {
                const newUserInfo = { ...this.data.userInfo, avatarUrl: data.url };
                this.setData({ userInfo: newUserInfo });
                wx.showToast({ title: '头像更新成功', icon: 'success' });
              } else {
                wx.showToast({ title: data.msg || '头像上传失败', icon: 'none' });
              }
            } catch (e) {
              console.error('解析上传响应失败：', e);
              wx.showToast({ title: '头像上传失败', icon: 'none' });
            }
          },
          fail: (err) => {
            console.error('头像上传失败：', err);
            wx.showToast({ title: '头像上传失败', icon: 'none' });
          },
          complete: () => {
            wx.hideLoading();
          }
        });
      }
    });
  },

  /**
   * 保存用户资料
   */
  onSaveProfile() {
    console.log('开始执行保存逻辑');
    const { formData, userInfo } = this.data;

    // 验证用户ID
    if (!userInfo.id || typeof userInfo.id !== 'number') {
      wx.showToast({ title: '用户ID格式错误', icon: 'none' });
      return;
    }

    // 表单验证
    if (!formData.name.trim()) {
      wx.showToast({ title: '请输入姓名', icon: 'none' });
      return;
    }
    if (!formData.phone.trim()) {
      wx.showToast({ title: '请输入手机号', icon: 'none' });
      return;
    }
    if (!/^1\d{10}$/.test(formData.phone)) {
      wx.showToast({ title: '手机号格式错误', icon: 'none' });
      return;
    }
    if (!formData.password.trim()) {
      wx.showToast({ title: '请输入原始密码', icon: 'none' });
      return;
    }

    // 构建提交数据
    const submitData = {
      id: userInfo.id,
      nickname: formData.name,
      phone: formData.phone,
      sex: formData.gender === '男' ? 0 : 1, // 与加载时的映射保持一致
      birthday: formData.birthday,
      address: formData.location,
      introduce: formData.bio,
      avatarUrl: userInfo.avatarUrl,
      rawPassword: formData.password,
        // 增加可能需要的其他字段
        password: formData.password     // 额外添加password字段，防止后端实际需要的是这个名称
    };
    console.log('提交的数据:', submitData); // 打印提交的数据，确认rawPassword存在



    // 发送保存请求
    wx.showLoading({ title: '保存中...' });
    wx.request({
      url: `http://localhost:8080/userr/users`, 
      method: 'PUT',
      header: {
        'Authorization': `Bearer ${wx.getStorageSync('token')}`,
        'Content-Type': 'application/json;charset=UTF-8'
      },
      data: submitData,
      success: (res) => {
        console.log('保存接口响应：', res);
        wx.hideLoading();
        if (res.statusCode === 200 && res.data.code === 200) {
          this.loadUserInfo(); // 重新加载最新数据
          wx.showToast({ title: '保存成功', icon: 'success' });
          setTimeout(() => wx.navigateBack(), 1000);
        } else {
          wx.showToast({
            title: res.data.msg || '保存失败',
            icon: 'none'
          });
        }
      },
      fail: (err) => {
        console.error('保存请求失败：', err);
        wx.hideLoading();
        wx.showToast({ title: '网络错误，保存失败', icon: 'none' });
      }
    });
  }
});
